/*tamaño de bloque:
 * Salida del valgrind:
 *     D1 cache:         8192 B, 64 B, 4-way associative
 *     Ir I1mr ILmr    Dr D1mr DLmr Dw D1mw DLmw 
 *  3,072    0    0 1,024   63   63  0    0    0  j=ptr[i];
 *  Cantidad de misses = cantidad de bloques levantados = 63
 *  Cantidad de Bloques= 63 + 1 = 64 (malloc cachea el primer bloque)
 *  Espacio en memoria = 1024 * sizeof(int) ?=? 1024*4
 *  Cuenta: 1024*4/64=64
 *  TODO: sizeof(int) depende de la implementación/plataforma, convendría pasar
 *  las pruebas a char.
 */

#define ALLOC_SIZE (1<<20)

#include <stdlib.h>
char read1M(register char *ptr){
	register size_t i;
	register char j;
	for (i=0; i<ALLOC_SIZE; i++)
MAGIC:		j=ptr[i];
	return j;
}

int main(){
	char * ptr;
	ptr = malloc(sizeof(char)*ALLOC_SIZE);
	if (ptr==NULL) return 1;
	read1M(ptr);
	free(ptr);
	return 0;
}
